const jwt = require('jsonwebtoken');
const AdminModel = require('../models/adminModel');

// JWT 密钥（在生产环境中应使用环境变量）
const JWT_SECRET = process.env.JWT_SECRET || 'xiqu_admin_secret_key';

// 管理员认证中间件
const adminAuth = async (req, res, next) => {
  try {
    // 从请求头获取 token
    const authHeader = req.headers['authorization'];
    
    if (!authHeader) {
      return res.status(401).json({
        code: 401,
        msg: '未提供访问令牌'
      });
    }
    
    // 验证 token 格式
    const tokenParts = authHeader.split(' ');
    if (tokenParts[0] !== 'Bearer' || !tokenParts[1]) {
      return res.status(401).json({
        code: 401,
        msg: '无效的令牌格式'
      });
    }
    
    const token = tokenParts[1];
    
    // 验证 token
    const decoded = jwt.verify(token, JWT_SECRET);
    
    // 验证管理员用户是否存在
    const admin = await AdminModel.findByUsername(decoded.username);
    
    if (!admin) {
      return res.status(401).json({
        code: 401,
        msg: '管理员不存在'
      });
    }
    
    // 将管理员信息添加到请求对象中
    req.admin = {
      id: decoded.id,
      username: decoded.username
    };
    req.adminId = decoded.id;
    
    next();
  } catch (error) {
    if (error.name === 'JsonWebTokenError') {
      return res.status(401).json({
        code: 401,
        msg: '无效的访问令牌'
      });
    }
    
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({
        code: 401,
        msg: '访问令牌已过期'
      });
    }
    
    console.error('管理员认证失败:', error);
    return res.status(500).json({
      code: 500,
      msg: '服务器错误'
    });
  }
};

module.exports = adminAuth;